home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 26 / AACD 26.iso / AACD / System / XFD / Developer / Sources / ASM / B6B2AFCB.a < prev    next >
Encoding:
Text File  |  2001-09-16  |  6.8 KB  |  424 lines

  1. *******************************************************
  2. **   XFD external decruncher for B6B2AFCB Cruncher   **
  3. **        written by Mr. Larmer / Wanted Team        **
  4. *******************************************************
  5.  
  6. ;        OUTPUT    LIBS:xfd/$B6B2AFCB
  7.  
  8.         SECTION    B6B2AFCBDecrunch,CODE
  9.  
  10.         INCDIR    "dh2:Include/"    ;change this as you need it
  11.         INCLUDE    "libraries/xfdmaster.i"
  12.  
  13. ; xfdForeman structure MUST be first thing in all external decrunchers
  14.  
  15. F_B6B2AFCB        moveq    #-1,d0        ;security
  16.         rts
  17.         dc.l    XFDF_ID        ;id
  18.         dc.w    1        ;version
  19.         dc.w    0
  20.         dc.l    0,0        ;private
  21.         dc.l    S_B6B2AFCB    ;first slave
  22.  
  23.         dc.b    "$VER: External Andromeda decruncher for xfdmaster.library "
  24.         dc.b    "by Mr.Larmer/Wanted Team (20.11.99)",13,10,0
  25.         cnop    0,4
  26.  
  27. **************************************************
  28.  
  29. ; xfdSlave structure: this one doesn't support segment decrunching
  30.  
  31. S_B6B2AFCB    dc.l    0        ;no more slaves
  32.         dc.w    1        ;version
  33.         dc.w    33        ;master version
  34.         dc.l    N_B6B2AFCB    ;name
  35.         dc.w    XFDPFF_DATA    ;flags
  36.         dc.w    0
  37.         dc.l    RB_B6B2AFCB    ;recog buffer
  38.         dc.l    DB_B6B2AFCB    ;decrunch buffer
  39.         dc.l    0        ;recog segment
  40.         dc.l    0        ;decrunch segment
  41.  
  42. N_B6B2AFCB    dc.b    "Andromeda ($B6B2AFCB) Data Cruncher",0
  43.         even
  44.  
  45. ;-------------------------------------------------
  46.  
  47. ; Recog buffer function: receives buffer + length in a0/d0
  48.  
  49. RB_B6B2AFCB    cmp.l    #12+2,d0
  50.         ble.s    .Exit
  51.         cmp.l    #$B6B2AFCB,(a0)
  52.         bne.s    .Exit
  53.         moveq    #1,d0
  54.         rts
  55.  
  56. .Exit        moveq    #0,d0
  57.         rts
  58.  
  59. ;-------------------------------------------------
  60.  
  61. ;Decrunch buffer function: receives bufferinfo in a0
  62.  
  63. DB_B6B2AFCB    movem.l    d2-d7/a2-a6,-(a7)
  64.         move.l    a0,a5
  65.         move.l    xfdbi_SourceBuffer(a5),a2
  66.  
  67.         move.l    16(A2),D0
  68.         lsl.l    #2,D0
  69.         move.l    D0,D2
  70.  
  71.         move.l    d0,xfdbi_TargetBufSaveLen(a5)
  72.         add.l    12(A2),D0
  73.         move.l    d0,xfdbi_TargetBufLen(a5)
  74.  
  75.         move.l    xfdbi_TargetBufMemType(a5),d1
  76.         move.l    4.w,a6
  77.         jsr    -198(a6)
  78.         move.w    #XFDERR_NOMEMORY,xfdbi_Error(a5)
  79.         move.l    d0,xfdbi_TargetBuffer(a5)
  80.         beq.s    .Exit
  81.  
  82.         movem.l    d0-a6,-(a7)
  83.  
  84.         move.l    d0,a1
  85.         move.l    a2,a0
  86.  
  87.         move.l    A1,A2
  88.         add.l    D2,A2
  89.     
  90. ;        lea    Buffer(pc),a2
  91.         bsr.s    D_B6B2AFCB
  92.  
  93.         movem.l    (a7)+,d0-a6
  94.  
  95.         moveq    #1,d0
  96. .Exit        movem.l    (a7)+,d2-d7/a2-a6
  97.         rts
  98.  
  99. **************************************************
  100.  
  101. D_B6B2AFCB
  102.     addq.l    #4,A0
  103.     movem.l    (A0)+,D0/D1/D4
  104.     adda.l    D4,A2
  105.     suba.w    #$30,SP
  106.     lea    (SP),A4
  107.     bsr.b    lbC000018
  108.     adda.w    #$30,SP
  109.     rts
  110.  
  111. lbC000018:
  112.     lea    8(A4),A5
  113.     move.l    #$60A0A12,(A5)+
  114.     move.l    #$2030304,(A5)+
  115.     move.l    #$4050700,(A5)+
  116.     move.w    D0,(A4)
  117.     clr.w    D0
  118.     rol.l    #4,D0
  119.     move.b    D0,-(A5)
  120.     clr.b    D0
  121.     rol.l    #4,D0
  122.     move.l    D0,2(A4)
  123.     move.l    D1,4(A4)
  124.     lea    lbL0002B4(PC),A3
  125.     mulu.w    #12,D0
  126.     adda.w    D0,A3
  127.     lea    $24(A4),A5
  128.     lea    (A5),A6
  129.     move.l    (A3)+,(A5)+
  130.     move.l    (A3)+,(A5)+
  131.     move.l    (A3),(A5)
  132.     lea    $14(A4),A5
  133.     moveq    #7,D1
  134. lbC00005E:
  135.     move.b    (A6)+,D0
  136.     bpl.b    lbC00006A
  137.     andi.b    #$7F,D0
  138.     addq.b    #8,D0
  139. lbC00006A:
  140.     moveq    #0,D2
  141.     bset    D0,D2
  142.     tst.l    4(A4)
  143.     bpl.b    lbC000078
  144.     subq.w    #1,D2
  145. lbC000078:
  146.     move.w    D2,(A5)+
  147.     dbra    D1,lbC00005E
  148.     lea    $14(A4),A6
  149.     lea    $1C(A4),A5
  150.     moveq    #3,D1
  151. lbC000088:
  152.     move.w    (A6)+,D0
  153.     add.w    D0,(A5)+
  154.     dbra    D1,lbC000088
  155.     andi.b    #$7F,4(A4)
  156.     lea    (A1),A3
  157.     lea    (A2),A6
  158. lbC00009A:
  159.     cmpa.l    A6,A2
  160.     bne.b    lbC0000A4
  161.     bsr.b    lbC0000F2
  162. lbC0000A4:
  163.     move.l    (A2)+,D0
  164.     bpl.b    lbC0000AC
  165.     rts
  166.  
  167. lbC0000AC:
  168.     lea    (A3),A1
  169. lbC0000AE:
  170.     lea    -$20(A6),A6
  171.     movem.l    D1-D7/A0,-(SP)
  172.     subq.l    #8,D0
  173.     bmi.b    lbC0000D2
  174. lbC0000BC:
  175.     cmpa.l    A6,A2
  176.     bhi.b    lbC0000D2
  177.     movem.l    (A2)+,D1-D7/A0
  178.     movem.l    D1-D7/A0,(A1)
  179.     lea    $20(A1),A1
  180.     subq.l    #8,D0
  181.     bpl.s    lbC0000BC
  182. lbC0000D2:
  183.     movem.l    (SP)+,D1-D7/A0
  184.     lea    $20(A6),A6
  185.     addq.l    #8,D0
  186.     beq.s    lbC00009A
  187. lbC0000DE:
  188.     cmpa.l    A6,A2
  189.     beq.b    lbC0000EC
  190.     move.l    (A2)+,(A1)+
  191.     subq.l    #1,D0
  192.     bne.s    lbC0000DE
  193.     bra.s    lbC00009A
  194.  
  195. lbC0000EC:
  196.     bsr.b    lbC0000F2
  197.     bra.s    lbC0000AE
  198.  
  199. lbC0000F2:
  200.     suba.l    D4,A2
  201.     movem.l    D0/A3,-(SP)
  202.     lea    (A2),A3
  203.     move.w    D4,D5
  204.     move.w    (A4),D2
  205.     move.b    2(A4),D1
  206.     move.b    3(A4),D0
  207.     bne.w    lbC000262
  208.     bra.w    lbC000284
  209.  
  210. lbC00010E:
  211.     add.b    D1,D1
  212.     bne.b    lbC000118
  213.     move.b    (A0)+,D1
  214.     addx.b    D1,D1
  215. lbC000118:
  216.     bcc.b    lbC0001A0
  217.     add.b    D1,D1
  218.     bne.b    lbC000126
  219.     move.b    (A0)+,D1
  220.     addx.b    D1,D1
  221. lbC000126:
  222.     bcc.b    lbC000198
  223.     add.b    D1,D1
  224.     bne.b    lbC000134
  225.     move.b    (A0)+,D1
  226.     addx.b    D1,D1
  227. lbC000134:
  228.     bcc.b    lbC000190
  229.     add.b    D1,D1
  230.     bne.b    lbC000142
  231.     move.b    (A0)+,D1
  232.     addx.b    D1,D1
  233. lbC000142:
  234.     bcc.b    lbC000188
  235.     add.b    D1,D1
  236.     bne.b    lbC000150
  237.     move.b    (A0)+,D1
  238.     addx.b    D1,D1
  239. lbC000150:
  240.     bcc.b    lbC00015C
  241.     move.b    (A0)+,D0
  242.     moveq    #3,D7
  243.     bra.b    lbC0001A4
  244.  
  245. lbC00015C:
  246.     add.b    D1,D1
  247.     bne.b    lbC000166
  248.     move.b    (A0)+,D1
  249.     addx.b    D1,D1
  250. lbC000166:
  251.     addx.b    D0,D0
  252.     add.b    D1,D1
  253.     bne.b    lbC000172
  254.     move.b    (A0)+,D1
  255.     addx.b    D1,D1
  256. lbC000172:
  257.     addx.b    D0,D0
  258.     add.b    D1,D1
  259.     bne.b    lbC00017E
  260.     move.b    (A0)+,D1
  261.     addx.b    D1,D1
  262. lbC00017E:
  263.     addx.b    D0,D0
  264.     addq.b    #6,D0
  265.     moveq    #3,D7
  266.     bra.b    lbC0001A4
  267.  
  268. lbC000188:
  269.     moveq    #5,D0
  270.     moveq    #3,D7
  271.     bra.b    lbC0001A4
  272.  
  273. lbC000190:
  274.     moveq    #4,D0
  275.     moveq    #2,D7
  276.     bra.b    lbC0001A4
  277.  
  278. lbC000198:
  279.     moveq    #3,D0
  280.     moveq    #1,D7
  281.     bra.b    lbC0001A4
  282.  
  283. lbC0001A0:
  284.     moveq    #2,D0
  285.     moveq    #0,D7
  286. lbC0001A4:
  287.     move.w    D7,D3
  288.     add.b    D1,D1
  289.     bne.b    lbC0001B0
  290.     move.b    (A0)+,D1
  291.     addx.b    D1,D1
  292. lbC0001B0:
  293.     bcc.b    lbC0001CE
  294.     add.b    D1,D1
  295.     bne.b    lbC0001BE
  296.     move.b    (A0)+,D1
  297.     addx.b    D1,D1
  298. lbC0001BE:
  299.     bcc.b    lbC0001DE
  300.     moveq    #0,D6
  301.     move.b    8(A4,D7.W),D6
  302.     addq.b    #4,D7
  303.     bra.b    lbC0001E0
  304.  
  305. lbC0001CE:
  306.     add.b    D1,D1
  307.     bne.b    lbC0001D8
  308.     move.b    (A0)+,D1
  309.     addx.b    D1,D1
  310. lbC0001D8:
  311.     addx.w    D2,D2
  312.     bra.b    lbC0001F6
  313.  
  314. lbC0001DE:
  315.     moveq    #2,D6
  316. lbC0001E0:
  317.     move.b    12(A4,D7.W),D7
  318. lbC0001E4:
  319.     add.b    D1,D1
  320.     bne.b    lbC0001EE
  321.     move.b    (A0)+,D1
  322.     addx.b    D1,D1
  323. lbC0001EE:
  324.     addx.w    D2,D2
  325.     subq.b    #1,D7
  326.     bne.s    lbC0001E4
  327.     add.w    D6,D2
  328. lbC0001F6:
  329.     moveq    #0,D6
  330.     movea.w    D6,A5
  331.     move.w    D3,D7
  332.     add.b    D1,D1
  333.     bne.b    lbC000206
  334.     move.b    (A0)+,D1
  335.     addx.b    D1,D1
  336. lbC000206:
  337.     bcc.b    lbC00022A
  338.     add.w    D3,D3
  339.     add.b    D1,D1
  340.     bne.b    lbC000216
  341.     move.b    (A0)+,D1
  342.     addx.b    D1,D1
  343. lbC000216:
  344.     bcc.b    lbC000224
  345.     movea.w    $1C(A4,D3.W),A5
  346.     addq.b    #8,D7
  347.     bra.b    lbC00022A
  348.  
  349. lbC000224:
  350.     movea.w    $14(A4,D3.W),A5
  351.     addq.b    #4,D7
  352. lbC00022A:
  353.     move.b    $24(A4,D7.W),D7
  354.     bpl.b    lbC00023C
  355.     move.b    (A0)+,D6
  356.     andi.b    #$7F,D7
  357.     beq.b    lbC00024C
  358. lbC00023C:
  359.     add.b    D1,D1
  360.     bne.b    lbC000246
  361.     move.b    (A0)+,D1
  362.     addx.b    D1,D1
  363. lbC000246:
  364.     addx.w    D6,D6
  365.     subq.b    #1,D7
  366.     bne.s    lbC00023C
  367. lbC00024C:
  368.     addq.w    #1,D6
  369.     add.w    A5,D6
  370.     lea    (A3),A5
  371.     suba.w    D6,A5
  372.     cmpa.l    A2,A5
  373.     bcc.b    lbC00025C
  374.     adda.w    D4,A5
  375. lbC00025C:
  376.     cmpa.l    A5,A6
  377.     beq.b    lbC00027A
  378. lbC000262:
  379.     subq.w    #1,D5
  380.     bmi.b    lbC0002A4
  381. lbC000268:
  382.     move.b    (A5)+,(A3)+
  383.     subq.b    #1,D0
  384.     beq.b    lbC000284
  385.     cmpa.l    A5,A6
  386.     dbeq    D5,lbC000268
  387.     bne.b    lbC0002A4
  388. lbC00027A:
  389.     lea    (A2),A5
  390.     dbra    D5,lbC000268
  391.     bra.b    lbC0002A4
  392.  
  393. lbC000284:
  394.     tst.w    D2
  395.     beq.b    lbC00029C
  396.     subq.w    #1,D5
  397.     bmi.b    lbC0002A4
  398. lbC000290:
  399.     move.b    (A0)+,(A3)+
  400.     subq.w    #1,D2
  401.     dbeq    D5,lbC000290
  402.     bne.b    lbC0002A4
  403. lbC00029C:
  404.     subq.l    #1,4(A4)
  405.     bne.w    lbC00010E
  406. lbC0002A4:
  407.     move.b    D0,3(A4)
  408.     move.b    D1,2(A4)
  409.     move.w    D2,(A4)
  410.     movem.l    (SP)+,D0/A3
  411.     rts
  412.  
  413. lbL0002B4:
  414.     dc.l    $5050505,$5050505,$6060606,$5060707,$6060606
  415.     dc.l    $7070606,$5060707,$7070707,$80808080,$5060780
  416.     dc.l    $7078080,$80818181,$6070780,$7808181,$80818282
  417.     dc.l    $6070780,$7818182,$80828383,$6070780,$7818182
  418.     dc.l    $80828484,$6070780,$7818282,$80838485,$6070780
  419.     dc.l    $7818283,$80838586
  420.  
  421. ;Buffer    dcb.b    $5000
  422.  
  423.         END
  424.